package Work.com.example.one;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.stream.Collectors;

public class MainApp {
    private Trader raoul = new Trader("Raoul", "Cambridge");
    private Trader mario = new Trader("Mario", "Milan");
    private Trader alan = new Trader("Alan", "Cambridge");
    private Trader brian = new Trader("Brian", "Cambridge");


    private List<Transaction> transactionList = Arrays.asList(
            new Transaction(brian, 2011, 300),
            new Transaction(raoul, 2012, 1000),
            new Transaction(raoul, 2011, 400),
            new Transaction(mario, 2012, 710),
            new Transaction(mario, 2012, 700),
            new Transaction(alan, 2012, 950)
    );

    public static void main(String[] args) {
     //QuestionNo1();//第一题：找出2011年发生的所有交易，并按交易额排序(从高到低)
     //QuestionNo2();//第二题：交易员都在哪些不同的城市工作过
     //QuestionNo3();//第三题：查找所有来自Cambridge的交易员，并按姓名排序
     //QuestionNo4();//第四题：返回所有交易员的姓名字符串，按字母顺序排序。
     //QuestionNo5();//第五题：有没有交易员在Milan工作
     //QuestionNo6();//第六题：打印生活在Cambridge的交易员的所有交易额。
     //QuestionNo7();//第七题：所有的交易额中，最高的交易额是多少？
     QuestionNo8();//第八题：所有的交易额中，找到交易额最小的交易



    }

    public static void QuestionNo1(){
        MainApp mainApp=new MainApp();
       //第一题：找出2011年发生的所有交易，并按交易额排序(从高到低)
        mainApp.transactionList.stream()
                .filter(T -> T.getYear()==2011)
                .sorted((T1,T2) -> T2.getValue() - T1.getValue())
                .forEach(System.out::println);

    }

    public static void QuestionNo2(){
        //第二题：交易员都在哪些不同的城市工作过？
        MainApp mainApp=new MainApp();
        List<String> str = mainApp.transactionList.stream()
           .map(Transaction ->Transaction.getTrader())//将流中的每个元素都映射为另一个元素；
           .map(Trader-> Trader.getCity())//将流中的每个元素都映射为另一个元素；
           .distinct()//去重
           .collect(Collectors.toList());//转为list集合
        for (String s : str) {
            System.out.println(s);
        }
    }
    public static void QuestionNo3(){
     //第三题：查找所有来自Cambridge的交易员，并按姓名排序
        MainApp mainApp=new MainApp();
        mainApp.transactionList.stream()
                .map(Transaction::getTrader)
                .filter(Trader->Trader.getCity().equals("Cambridge"))
                .distinct()//去重
                .sorted((T1,T2)->T1.getName().compareTo(T2.getName()))
                .forEach(T-> System.out.println(T.getName()));
    }
    public static void QuestionNo4(){
        //第四题：返回所有交易员的姓名字符串，按字母顺序排序。
        MainApp mainApp=new MainApp();
        List<String> list=mainApp.transactionList.stream()
           .map(Transaction::getTrader)
           .distinct()
           .sorted((T1,T2)->T1.getName().compareTo(T2.getName()))
           .map(Trader->{
               StringJoiner NameStr=new StringJoiner(",");
               NameStr.add(Trader.getName());
               return NameStr.toString();
           })
           .collect(Collectors.toList());
        System.out.println(list);
    }
    public static void QuestionNo5(){
        //第五题：有没有交易员在Milan工作
        MainApp mainApp=new MainApp();
        List<Trader> list=mainApp.transactionList.stream()
                .map(Transaction::getTrader)
                .distinct()
                .filter(Trader->"Milan".equals(Trader.getCity()))
                .collect(Collectors.toList());
        System.out.println(list);
    }
    public static void QuestionNo6(){
      //第六题：打印生活在Cambridge的交易员的所有交易额。
        MainApp mainApp=new MainApp();
        int Count=mainApp.transactionList.stream()
                .filter(Transaction->"Cambridge".equals(Transaction.getTrader().getCity()))
                .collect(Collectors.summingInt(Transaction::getValue));
        System.out.println("合计："+Count);
    }
    public static void QuestionNo7(){
        //第七题：所有的交易额中，最高的交易额是多少？
        MainApp mainApp=new MainApp();
        Optional<Integer> i=mainApp.transactionList.stream()
                .map(Transaction::getValue)
                .max(Integer::compareTo);
        System.out.println("最高的交易金额："+i);
    }
    public static void QuestionNo8(){
        //第八题：所有的交易额中，找到交易额最小的交易
        MainApp mainApp=new MainApp();
        Optional<Integer> min=mainApp.transactionList.stream()
                .map(Transaction::getValue)
                .min(Integer::compareTo);
        int i =min.orElse(0);/*Optional转int类型*/
        System.out.println(i);
       // int result = min.orElseGet(() -> Integer.valueOf(0));  // 如果opt对象不为空，则返回其对应的对象值；否则返回指定的函数返回值
    }


}
